<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Ad extends CI_Controller {

    private $_data;

    function __construct() {
        parent::__construct();
        $this->load->model(array('admodel', 'ratemodel', 'ad_comment_model', 'eventmodel', 'advertising/advertising_model'));
        $this->load->helper('config');
        
        if ($this->router->method != 'index' AND $this->router->method != 'view') {
            if (!isset($_SESSION['userLoggedIn'])) {
                redirect();
            }
        }
    }

    /**
     * Action index
     * Hiển thị danh sách tất cả
     */
    public function index($page = 0, $isAjax = FALSE, $categoryId = NULL) {
        $this->load->helper('frontend');
        $this->load->helper('user');
        $this->load->helper('ads');
        $this->load->helper('controller');
        if ($categoryId) {
            //$data['ads'] = $this->admodel->getRecruitmentsByCategoryId(8, $page * 8, $categoryId);
            $data['ads'] = $this->admodel->getAds(18, $page * 18);
        } else {
            $data['ads'] = $this->admodel->getAds(18, $page * 18);
        }

        if ($page) {
            $data['extra'] = true;
        }

        if ($isAjax) {
            $this->load->view('ad/index', $data);
        } else {
            $this->_data['content'] = $this->load->view('ad/index', $data, true);
            $this->load->view('layout/frontend/index', $this->_data);
        }
    }

    /**
     * Action view
     * Xem chi tiết thông tin
     */
    public function view($isAjax = FALSE, $adId) {
        $this->load->helper('frontend');
        $this->load->helper('user_helper');
        $this->load->helper(array('ads', 'string_processing'));
//	  $this->admodel->updateViewed($id);
        // Kiểm tra xem người dùng đã đăng nhập hay chưa
        if (!isset($_SESSION['userLoggedIn'])) {
            $data['not_login'] = 1;
        }

        $data['advertisings_arr'] = $this->advertising_model->getAdvertisingByBid(Config_type_helper::TYPE_AD, Config_position_helper::POSITION_POPUP_DETAIL_PRODUCT);
        
        if ($isAjax) {
            $data['ad'] = $this->admodel->getAdById($adId);
            if (isset($data['ad']['ad_id']) && $data['ad']['ad_id'] != "") {
                $rated_id = $data['ad']['ad_id'];
                // Kiểm tra xem người dùng đã rate cho rao vặt này chưa
                if (isset($_SESSION['userLoggedIn'])) {
                    $data['rate'] = $this->ratemodel->getRateByUserIdAndRatedIdAndType((int) $_SESSION['userLoggedIn']['id'], $rated_id, 3);
                    if (isset($data['rate']['id']) && $data['rate']['id'] != "") {
                        $data['rated'] = 1;
                    }
                }
                // Lấy danh sách các comment
                $data['comment'] = $this->ad_comment_model->getCommentByAdId($data['ad']['ad_id'], 0, 10);
                if (count($data['comment']) == 0) {
                    $data['check_comment'] = 0;
                }
            }
            $this->load->view('ad/view', $data);
        } else {
            $data = array('id' => $id);
            $this->_data['content'] = $this->load->view('ad/search', $data, true);
            $this->load->view('layout/frontend/index', $this->_data);
        }
    }

    public function add() {
        $this->load->helper('frontend');
        $this->load->helper('ads');
        $this->load->library(array('form_validation'));
        $this->load->model('usermodel');

        $data['user'] = $this->usermodel->getUserById((int) $_SESSION['userLoggedIn']['id']);
        $data['ad'] = $this->admodel->getAdByUserId((int) $_SESSION['userLoggedIn']['id']);
        if ($data['ad']) { // edit
            $adId = $data['ad']['ad_id'];
        } else { // Khởi tạo các giá trị ban đầu khi add
            $data['ad'] = array(
                'ad_id' => '',
                'category_id' => '', // Chuyên mục
                'demand' => '', // Nhu cầu
                'city' => '', // Tỉnh thành
                'district' => '', // Quận huyện
                'title' => '', // Tiêu đề rao vặt
                'price' => '', // Giá bán
                'base_price' => '', // Giá gốc
                'date_edit' => '', // Cập nhật ngày
                'warranty' => '', // Bảo hành
                'status' => '', // Tình trạng
                'forms' => '', // Hình thức
                'made_in' => '', // Xuất xứ
                'shipping' => '', // Vận chuyển
                'quantity' => '', // Số lượng hàng
                'description' => '',
                'album' => '',
                'lat' => '',
                'lng' => '',
                'intro_video' => '',
                'slug' => '',
            );
        }

        if (isset($_POST['ad-submit'])) {
            unset($_POST['ad-submit']);
            $this->form_validation->set_rules('category_id', 'Chuyên mục', 'trim|xss_clean');
            $this->form_validation->set_rules('demand', 'Nhu cầu', 'trim|xss_clean');
            $this->form_validation->set_rules('city', 'Tỉnh thành', 'trim|xss_clean');
            $this->form_validation->set_rules('district', 'Quận huyện', 'trim|xss_clean');
            $this->form_validation->set_rules('title', 'Tiêu đề rao vặt', 'trim|xss_clean');
            $this->form_validation->set_rules('price', 'Giá bán', 'trim|xss_clean');
            $this->form_validation->set_rules('base_price', 'Giá gốc', 'trim|xss_clean');
            $this->form_validation->set_rules('date', 'Cập nhật ngày', 'trim|xss_clean');
            $this->form_validation->set_rules('warranty', 'Bảo hành', 'trim|xss_clean');
            $this->form_validation->set_rules('status', 'Tình trạng', 'trim|xss_clean');
            $this->form_validation->set_rules('forms', 'Hình thức', 'trim|xss_clean');
            $this->form_validation->set_rules('made_in', 'Xuất xứ', 'trim|xss_clean');
            $this->form_validation->set_rules('shipping', 'Vận chuyển', 'trim|xss_clean');
            $this->form_validation->set_rules('quantity', 'Số lượng hàng', 'trim|xss_clean');
            $this->form_validation->set_rules('description', 'Miêu tả', 'trim|xss_clean');
            $this->form_validation->set_rules('albums', 'Ảnh album', 'trim|xss_clean');
        } elseif (isset($_POST['map'])) {
            unset($_POST['map']);
            $this->_addMap();
        }

        if ($this->form_validation->run() == FALSE) { // not validate form 
            $this->_data['content'] = $this->load->view('ad/add', $data, true);
            $this->load->view('layout/frontend/index', $this->_data);
            return FALSE;
        } else {
            $_POST['user_id'] = (int) $_SESSION['userLoggedIn']['id'];

            if ($_POST['intro_video']) {
                $_POST['intro_video'] = str_replace('watch?v=', 'embed/', $_POST['intro_video']);
            }

            if ($_POST['category_id']) {
                $this->load->helper('controller');

                $_POST['slug'] = generalSlug($_POST['slug']);
            }

            if (isset($adId)) {
                $this->admodel->update($adId, $_POST);
                $this->session->set_flashdata('message', 'Đã thay đổi thành công!');
            } else {
                $this->admodel->add($_POST);
                $this->session->set_flashdata('message', 'Đã thêm mới thành công!');
            }
            redirect('ad/add');
            return TRUE;
        }
    }

    private function _addMap() {
        if ($_POST['ad_id']) {
            $adId = $_POST['ad_id'];
        }

        $this->form_validation->set_rules('lat', 'Vị trí không hợp lệ', 'trim|required|decimal');
        $this->form_validation->set_rules('lng', 'Vị trí không hợp lệ', 'trim|required|decimal');

        if ($this->form_validation->run() == FALSE) { // not validate form
            $this->_data['content'] = $this->load->view('ad/add', $data, true);
            $this->load->view('layout/frontend/index', $this->_data);
        } else {
            if (isset($adId)) {
                $this->admodel->update($adId, $_POST);
                $this->session->set_flashdata('message', 'Đã thay đổi thành công!');
            } else {
                $this->admodel->add($_POST);
                $this->session->set_flashdata('message', 'Đã thêm mới thành công!');
            }
            redirect('ad/add');
            return TRUE;
        }
    }

    public function addFile($type) {
        $data = ''; // file album to insert db
        $width = 626;
        $height = 379;
        if ($type == 'album') {
            $files = json_decode($_POST['dataAlbumCropJson'], TRUE);
        } else if ($type == 'logo') {
            $files = json_decode($_POST['datalogoCropJson'], TRUE);
            $width = 100;
            $height = 110;
        } else if ($type == 'avatar') {
            $files = json_decode($_POST['dataavatarCropJson'], TRUE);
            $width = 224;
            $height = 155;
        }
        $this->load->library('image_lib');

        //1. remove all file if edit
        if ($_POST['ad_id']) {
            $path = 'upload/ad/' . $type . '/' . $_SESSION['userLoggedIn']['id'];
            // Open the folder
            $dir_handle = @opendir($path) or die("Unable to open $path");
            // Loop through the files
            while ($file = readdir($dir_handle)) {
                if ($file == "." || $file == ".." || $file == "index.php")
                    continue;
                unlink('upload/ad/' . $type . '/' . $_SESSION['userLoggedIn']['id'] . '/' . $file);
            }
            // Close
            closedir($dir_handle);
        }

        foreach ($files as $fileName => $fileData) {
            // 2.crop image
            $this->image_lib->initialize(array(
                'image_library' => 'gd2',
                'source_image' => 'upload/ad/' . $type . '/temp/' . $fileName,
                'width' => $fileData['w'],
                'height' => $fileData['h'],
                'x_axis' => $fileData['x'],
                'y_axis' => $fileData['y'],
                'maintain_ratio' => FALSE
            ));

            if (!$this->image_lib->crop()) {
                $this->session->set_flashdata('message', $this->image_lib->display_errors());
                redirect('ad/add');
                return FALSE;
            } else {
                // 3.resize image
                $this->image_lib->initialize(array(
                    'image_library' => 'gd2',
                    'source_image' => 'upload/ad/' . $type . '/temp/' . $fileName,
                    'new_image' => 'upload/ad/' . $type . '/' . $_SESSION['userLoggedIn']['id'] . '/' . $fileName,
                    'width' => $width,
                    'height' => $height,
                    'maintain_ratio' => TRUE
                ));
                if (!$this->image_lib->resize()) {
                    $this->session->set_flashdata('message', $this->image_lib->display_errors());
                    redirect('ad/add');
                    return FALSE;
                }
            }
            $this->image_lib->clear();
            // 4.remove temp file
            unlink('upload/ad/' . $type . '/temp/' . $fileName);

            $data .= $fileName . ';';
        }
        $data = trim($data, ";");

        // 5.add to db
        if ($_POST['ad_id']) {
            $this->admodel->update($_POST['ad_id'], array($type => $data));
            $this->session->set_flashdata('message', 'Đã thay đổi thành công!');
        } else {
            $this->admodel->add($data);
            $this->session->set_flashdata('message', 'Đã thêm mới thành công!');
        }

        redirect('ad/add');
    }

    /**
     * Ajax upload to temp
     *
     * @return string list file upload
     */
    public function uploadFile($type) {
        $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false);
        if ($fn) {
            // AJAX call
            file_put_contents(
                    'upload/ad/' . $type . '/temp/' . $fn, file_get_contents('php://input')
            );
            echo "$fn uploaded";
            exit();
        }
    }

    // popup categories
    public function categories() {
        $this->load->view('ad/categories');
    }

    public function cities() {
        $this->load->view('ad/cities');
    }

}